# 面向对象： 封装、继承、多态

# object为继承的父类
class Student(object):
    """
    学生类
    """
    Name = 'bob'
    age = 21

    @classmethod
    def staticSay(cls):
        return cls.Name + ': Hello'

    def say(self):
        return self.Name + ': Hello'


stu = Student()
print(Student.__doc__)
# help(Student)
print(Student)
# 对象调用方法
print(stu.say())
# 类调用方法，传入对象作为参数
print(Student.say(stu))
# 类方法调用，类似静态方法
print(Student.staticSay())


class Pet(object):
    # 垃圾回收执行
    def __del__(self):
        print('垃圾回收自动执行', self)


# 构造方法，可以多继承
class Animal(object):
    # 构造方法，属性初始化
    def __init__(self, name, age):
        super().__init__()

        # 私有属性，不可直接访问，使用set/get
        self.__name = name
        self.age = age

    def eat(self):
        return self.__name + '：吃饭'

    def getName(self):
        return self.__name


class Cat(Animal, Pet):
    pass


cat = Cat('咪咪', 2)
print(cat.eat())
print(cat.getName())


# 删除对象引用
del cat
